# coding: utf-8
'''
Created on 24 avr. 2011

@author: shin
'''

class Damier():
    '''
    Le damier gère le positionnement des pièces
    '''

    def __init__(self, daoDamier):
        '''
        Crée les attributs :
        height
        width
        '''
        self.height = daoDamier.height
        self.width  = daoDamier.width
        self._position = self.initialisePosition()
        self._gameStatusLink = None
        self._uiDamierLink = None
        '''
        c'est un dictionnaire contenant la liste des éléments sur la case
        '''

    def initialisePosition(self):
        '''
        crée un dictionnaire et l'initialise avec le nom des cases comme clefs
        et y fait correspondre une liste vide
        '''
        position = {}
        for x in range(0, self.width):
            for y in range(1, self.height + 1):
                nomCase = chr(65 + x) + str(y)
                position[nomCase] = []
        return position

    def donnePosition(self, nom):
        '''
        donne la position d'un élément
        '''
        for case in self._position.keys():
            for name in self._position[case]: 
                if (name == nom):
                    return case
    
    def retire(self, nom):
        '''
        retire un élément du damier 
        '''
        for case in self._position.keys():
            for name in self._position[case]: 
                if (name == nom):
                    self._position[case].remove(name)

    def place(self, nom, case):
        '''
        place ou déplace une pièce sur le damier
        '''
        self.retire(nom)
        self._position[case].append(nom)
        self._uiDamierLink.updatePersonnage(nom, case)
        
    def linkGameStatus(self, gameStatus):
        self._gameStatusLink = gameStatus
        
    def addObserver(self, observer):
        '''
        pour que le damier connaisse l'ui à mettre à jour
        '''
        self._uiDamierLink = observer
        
    def contenu(self, case):
        '''
        retourne une liste donnant le contenu d'une case du damier
        '''
        return self._position[case]

